package br.com.egg.finances.view;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import br.com.egg.finances.business.dao.DAOFactory;
import br.com.egg.finances.dao.MovimentoDAO;
import br.com.egg.finances.model.ApropriacaoMovimento;
import br.com.egg.finances.model.Categoria;
import br.com.egg.finances.model.CentroCusto;
import br.com.egg.finances.model.Conta;
import br.com.egg.finances.model.Movimento;
import br.com.egg.finances.model.TipoMovimento;

public class MovimentoBean extends EntityBean {

	private Movimento movimento;
	private List<Movimento> movimentoList;
	private ApropriacaoMovimento apropriacaoMovimento;

	public Movimento getMovimento() {
		if (movimento == null) {
			movimento = new Movimento();
			movimento.setCdUsuario(retornaUsuarioSession().getCdUsuario());
		}
		return movimento;
	}

	public void setMovimento(Movimento movimento) {
		this.movimento = movimento;
	}

	public List<Movimento> getMovimentoList() {
		if (movimentoList == null) {
			movimentoList = DAOFactory.getMovimentoDAO().findAll(retornaUsuarioSession().getCdUsuario());
		}
		return movimentoList;
	}

	public void setMovimentoList(List<Movimento> movimentoList) {
		this.movimentoList = movimentoList;
	}

	public ApropriacaoMovimento getApropriacaoMovimento() {
		if (apropriacaoMovimento == null) {
			apropriacaoMovimento = new ApropriacaoMovimento();
			apropriacaoMovimento.setCdUsuario(retornaUsuarioSession().getCdUsuario());
		}
		return apropriacaoMovimento;
	}

	public void setApropriacaoMovimento(ApropriacaoMovimento apropriacaoMovimento) {
		this.apropriacaoMovimento = apropriacaoMovimento;
	}

	public String cadastraNovoMovimento() {
		try {
			movimento.getApropriacaoMovimentoList().add(apropriacaoMovimento);
			DAOFactory.getMovimentoDAO().insert(movimento);

			movimento = null;
			movimentoList = null;

			adicionaMensagemSucesso("Movimento salvo com sucesso.");
		} catch (Exception e) {
			trataException(e);
		}

		return null;
	}

	public String atualizarTodosMovimento() {
		try {
			MovimentoDAO movimentoDAO = DAOFactory.getMovimentoDAO();
			for (Movimento movimento : movimentoList) {
				movimentoDAO.update(movimento);
			}

			movimentoList = null;
			adicionaMensagemSucesso("Movimentos atualizados com sucesso.");
		} catch (Exception e) {
			trataException(e);
		}

		return null;
	}

	public String deletaMovimento() {
		try {
			DAOFactory.getMovimentoDAO().delete(movimento);

			movimento = null;
			movimentoList = null;

			adicionaMensagemSucesso("Movimento deletado com sucesso.");
		} catch (Exception e) {
			trataException(e);
		}

		return null;
	}
	
	public List<SelectItem> getTipoMovimentoSelectItems() {
		List<SelectItem> selectItemList = new ArrayList<SelectItem>();

		List<TipoMovimento> tipoMovimentoList = DAOFactory.getMovimentoDAO().findAllTipoMovimento();
		for (TipoMovimento tpMov : tipoMovimentoList) {
			selectItemList.add(new SelectItem(tpMov.getCdTipoMovimento(), tpMov.getNmTipoMovimento()));
		}
		
		return selectItemList;
	}
	
	public List<SelectItem> getContaSelectItems() {
		List<SelectItem> selectItemList = new ArrayList<SelectItem>();

		List<Conta> contaList = DAOFactory.getContaDAO().findAll(retornaUsuarioSession().getCdUsuario());
		for (Conta conta : contaList) {
			selectItemList.add(new SelectItem(conta.getCdConta(), conta.getDeConta()));
		}
		
		return selectItemList;
	}
	
	public List<SelectItem> getCentroCustoSelectItems() {
		List<SelectItem> selectItemList = new ArrayList<SelectItem>();

		List<CentroCusto> centroCustoList = DAOFactory.getCentroCustoDAO().findAll(retornaUsuarioSession().getCdUsuario());
		for (CentroCusto centroCusto : centroCustoList) {
			selectItemList.add(new SelectItem(centroCusto.getCdCentroCusto(), centroCusto.getNmCentroCusto()));
		}
		
		return selectItemList;
	}
	
	public List<SelectItem> getCategoriaSelectItems() {
		List<SelectItem> selectItemList = new ArrayList<SelectItem>();

		List<Categoria> categoriaList = DAOFactory.getCategoriaDAO().findAll(retornaUsuarioSession().getCdUsuario());
		for (Categoria categoria : categoriaList) {
			selectItemList.add(new SelectItem(categoria.getCdCategoria(), categoria.getNmCategoria()));
		}
		
		return selectItemList;
	}

}
